<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // let const  ES6新增声明变量的两种方式  类似ES5 var

    // let const 和 var 的共同点和区别
    
    // 共同点
    // 都可以声明局部变量和全局变量

    // 不同点:
    // 1. var 声明的变量有变量提升,let const 声明的变量没有变量提升
    // 2. var 声明的变量可以重复声明,let const 声明的变量不能重复声明
    // 3. var let 声明的变量可以重新赋值. const声明的是常量(常量变量 => 一经声明就无法被修改 -> 修改会报错)
    // 4. ES6新增块级作用域, 块级作用域let const声明的变量也是局部变量, 块级作用域对var没有影响

    // var a = 10;
    // let b = 20;
    // const c = 30;
    // console.log(a,b,c);

    // function fn(){
    //     var a = 100;
    //     let b = 200;
    //     const c = 300;
    //     console.log(a,b,c);
    // }

    // fn();
    // console.log(a,b,c);

    // ----------------------------------------------------------------------------------

    // 不同点:
    //  var 声明的变量有变量提升,let const 声明的变量没有变量提升
    //  var 声明的变量可以重复声明,let const 声明的变量不能重复声明
    //  var let 声明的变量可以重新赋值. const声明的是常量(常量变量 => 一经声明就无法被修改 -> 修改会报错)
    //  ES6新增块级作用域, 块级作用域let const声明的变量也是局部变量, 块级作用域对var没有影响

    // 关于变量提升  
    // console.log(a);  // undefined
    // console.log(b);  // 报错 Cannot access 'b' before initialization  => 初始化前无法访问“b”
    // console.log(c);  // 报错 Cannot access 'c' before initialization  => 初始化前无法访问“c”
    // var a = 10;
    // let b = 20;
    // const c = 30;
    // console.log(a,b,c);


    // 关于重新声明
    // var a = 10;
    // var a = 100;

    // let b = 20;
    // let b = 200;    // 报错 => Identifier 'b' has already been declared(标识符“b”已声明)

    // const c = 30;
    // const c = 30;     // 报错 => Identifier 'c' has already been declared(标识符“c”已声明)      

    // console.log(a,b,c);

    // 关于重新赋值
    // var a = 10;
    //     a = 100;
    // let b = 20;
    //     b = 200;
    // const c = 30;  // 报错 Assignment to constant variable. (常量变量的赋值。)
    //     c = 300;
    // console.log(a,b,c);

  





</script>
</html>